home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / text / edit / tecoc-146.lha / exei.c < prev    next >
C/C++ Source or Header  |  1991-07-05  |  2KB  |  80 lines

  1. /*****************************************************************************
  2.  
  3.     ExeI()
  4.  
  5.     This function executes an I command.
  6.     Itext$        Insert text
  7.     nI        Insert ASCII character "n"
  8.  
  9. *****************************************************************************/
  10.  
  11. #include "zport.h"        /* define portability identifiers */
  12. #include "tecoc.h"        /* define general identifiers */
  13. #include "defext.h"        /* define external global variables */
  14. #include "dchars.h"        /* define identifiers for characters */
  15. #include "deferr.h"        /* define identifiers for error messages */
  16.  
  17. DEFAULT ExeI()            /* execute an I command */
  18. {
  19.     unsigned char InChar;
  20.  
  21.     DBGFEN(1,"ExeI",NULL);
  22.     if (EStTop > EStBot) {            /* if numeric argument */
  23.         if (GetNmA() == FAILURE) {    /* get numeric argument */
  24.             DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed");
  25.             return FAILURE;
  26.         }
  27.  
  28.         if (CmdMod & ATSIGN) {        /* if it's n@I// */
  29.             if (IncCBP() == FAILURE) {
  30.                 DBGFEX(1,DbgFNm,"FAILURE, 1st IncCBP() failed");
  31.                 return FAILURE;
  32.             }
  33.             if (IncCBP() == FAILURE) {
  34.                 DBGFEX(1,DbgFNm,"FAILURE, 2nd IncCBP() failed");
  35.                 return FAILURE;
  36.             }
  37.             if (*CBfPtr != *(CBfPtr-1)) {
  38.                 ErrMsg(ERR_IIA);     /* illegal insert arg */
  39.                 DBGFEX(1,DbgFNm,"FAILURE, illegal insert arg");
  40.                 return FAILURE;
  41.             }
  42.         } else {                /* else must be nI$ */
  43.             if ((CBfPtr+1) == CStEnd) {
  44.                 if (MStTop < 0) {
  45.                     ErrUTC();
  46.                     DBGFEX(1,DbgFNm,"FAILURE, unterminated command");
  47.                     return FAILURE;
  48.                 } else {
  49.                     DBGFEX(1,DbgFNm,"SUCCESS");
  50.                     return SUCCESS;
  51.                 }
  52.             }
  53.             if (*(CBfPtr+1) != ESCAPE) {
  54.                 ErrMsg(ERR_IIA);     /* illegal insert arg */
  55.                 DBGFEX(1,DbgFNm,"FAILURE, illegal insert arg");
  56.                 return FAILURE;
  57.             }
  58.         }
  59.         InChar = (char)NArgmt;
  60.         if (InsStr(&InChar, (ptrdiff_t)1) == FAILURE) {
  61.             DBGFEX(1,DbgFNm,"FAILURE, InsStr() failed");
  62.             return FAILURE;
  63.         }
  64.     } else {                /* else no numeric argument */
  65.         if (FindES(ESCAPE) == FAILURE) {
  66.             DBGFEX(1,DbgFNm,"FAILURE, FindES() failed");
  67.             return FAILURE;
  68.         }
  69.         if (InsStr(ArgPtr, CBfPtr-ArgPtr) == FAILURE) {
  70.             DBGFEX(1,DbgFNm,"FAILURE, InsStr() failed");
  71.             return FAILURE;
  72.         }
  73.     }
  74.  
  75.     CmdMod = '\0';                /* clear modifiers flags */
  76.  
  77.     DBGFEX(1,DbgFNm,"SUCCESS");
  78.     return SUCCESS;
  79. }
  80.